import pandas as pd
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px
import plotly.graph_objects as go
C:\Users\mehdi\AppData\Local\Temp\ipykernel_25544\4051237116.py:3: UserWarning:
The dash_core_components package is deprecated. Please replace
`import dash_core_components as dcc` with `from dash import dcc`
import dash_core_components as dcc
C:\Users\mehdi\AppData\Local\Temp\ipykernel_25544\4051237116.py:4: UserWarning:
The dash_html_components package is deprecated. Please replace
`import dash_html_components as html` with `from dash import html`
import dash_html_components as html
Research and Development#
Research and development (R&D) are crucial for driving innovation, creating high-quality jobs, and building a sustainable, low-carbon economy. Recognizing this, the provincial government has developed the StrongerBC plan, which sets out a vision for strengthening R&D in B.C.
df1 = pd.read_csv("~/strongerbc/data/research_and_development_1.csv")
df = df1[df1['Year'] >= 2000]
fig = px.line(df1, x= 'Year', y = 'VALUE')
fig.show(render='notebook')
df1 = pd.read_csv("~/strongerbc/data/research_and_development_1.csv")
df = df1[df1['Year'] >= 2000]
app = dash.Dash(__name__)
# Labels and Steps of Year Range
labels = {str(year): str(year) for year in range(df['Year'].min(), df['Year'].max() + 1 , 5)}
steps = {str(year): '' for year in range(df['Year'].min(), df['Year'].max() + 1)}
marks = {**steps, **labels}
app.layout = html.Div([
html.Div([
dcc.Graph(id='value-graph')
], style={'width': '100%', 'display': 'inline-block'}),
html.Div([
dcc.RangeSlider(
id='year-slider',
min=df['Year'].min(),
max=df['Year'].max(),
value=[df['Year'].min(), df['Year'].max()],
marks=marks,
step=None
),
dcc.Dropdown(
id='geo-dropdown',
options=[{'label': i, 'value': i} for i in df['GEO'].unique()],
value=df['GEO'].unique()[0]
),
dcc.Dropdown(
id='Funder-dropdown',
options=[{'label': i, 'value': i} for i in df['Funder'].unique()],
value=df['Funder'].unique()[0]
),
dcc.Dropdown(
id='Performer-dropdown',
options=[{'label': i, 'value': i} for i in df['Performer'].unique()],
value=df['Performer'].unique()[0]
),
dcc.Dropdown(
id='ScienceType-dropdown',
options=[{'label': i, 'value': i} for i in df['Science type'].unique()],
value=df['Science type'].unique()[0]
),
dcc.Dropdown(
id='Prices-dropdown',
options=[{'label': i, 'value': i} for i in df['Prices'].unique()],
value=df['Prices'].unique()[0]
)
], style={'width': '100%', 'display': 'inline-block'}),
])
@app.callback(
Output('value-graph', 'figure'),
[Input('year-slider', 'value'),
Input('geo-dropdown', 'value'),
Input('Funder-dropdown', 'value'),
Input('Performer-dropdown', 'value'),
Input('ScienceType-dropdown', 'value'),
Input('Prices-dropdown', 'value')],
)
def update_graph(year_range, geo_value, Funder_value, Performer_value, ScienceType_value, Prices_value):
dff = df[(df['Year'] >= year_range[0]) &
(df['Year'] <= year_range[1]) &
(df['GEO'] == geo_value) &
(df['Funder'] == Funder_value)&
(df['Performer'] == Performer_value) &
(df['Science type'] == ScienceType_value) &
(df['Prices'] == Prices_value)]
fig = px.line(dff, x="Year", y="VALUE", title='Investment in Innovation', template='plotly_white')
fig.update_traces(mode='markers+lines')
fig.update_yaxes(title_text=f'{Prices_value} (in millions $ )')
fig.update_layout(
title={
'text': "Trends in Innovation Investment",
'y':0.9,
'x':0.5,
'xanchor': 'center',
'yanchor': 'top'})
return fig
if __name__ == '__main__':
app.run_server(debug=True)
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
Cell In[3], line 84
81 return fig
83 if __name__ == '__main__':
---> 84 app.run_server(debug=True)
File ~\miniconda3\lib\site-packages\dash\dash.py:2175, in Dash.run_server(self, *args, **kwargs)
2169 def run_server(self, *args, **kwargs):
2170 """`run_server` is a deprecated alias of `run` and may be removed in a
2171 future version. We recommend using `app.run` instead.
2172
2173 See `app.run` for usage information.
2174 """
-> 2175 self.run(*args, **kwargs)
File ~\miniconda3\lib\site-packages\dash\dash.py:2066, in Dash.run(self, host, port, proxy, debug, jupyter_mode, jupyter_width, jupyter_height, jupyter_server_url, dev_tools_ui, dev_tools_props_check, dev_tools_serve_dev_bundles, dev_tools_hot_reload, dev_tools_hot_reload_interval, dev_tools_hot_reload_watch_interval, dev_tools_hot_reload_max_retry, dev_tools_silence_routes_logging, dev_tools_prune_errors, **flask_run_options)
2063 extra_files.append(path)
2065 if jupyter_dash.active:
-> 2066 jupyter_dash.run_app(
2067 self,
2068 mode=jupyter_mode,
2069 width=jupyter_width,
2070 height=jupyter_height,
2071 host=host,
2072 port=port,
2073 server_url=jupyter_server_url,
2074 )
2075 else:
2076 self.server.run(host=host, port=port, debug=debug, **flask_run_options)
File ~\miniconda3\lib\site-packages\dash\_jupyter.py:401, in JupyterDash.run_app(self, app, mode, width, height, host, port, server_url)
399 display(HTML(msg))
400 else:
--> 401 raise final_error
File ~\miniconda3\lib\site-packages\dash\_jupyter.py:388, in JupyterDash.run_app(self, app, mode, width, height, host, port, server_url)
385 raise err
387 try:
--> 388 wait_for_app()
390 if self.in_colab:
391 JupyterDash._display_in_colab(dashboard_url, port, mode, width, height)
File ~\miniconda3\lib\site-packages\retrying.py:56, in retry.<locals>.wrap.<locals>.wrapped_f(*args, **kw)
54 @six.wraps(f)
55 def wrapped_f(*args, **kw):
---> 56 return Retrying(*dargs, **dkw).call(f, *args, **kw)
File ~\miniconda3\lib\site-packages\retrying.py:266, in Retrying.call(self, fn, *args, **kwargs)
263 if self.stop(attempt_number, delay_since_first_attempt_ms):
264 if not self._wrap_exception and attempt.has_exception:
265 # get() on an attempt with an exception should cause it to be raised, but raise just in case
--> 266 raise attempt.get()
267 else:
268 raise RetryError(attempt)
File ~\miniconda3\lib\site-packages\retrying.py:301, in Attempt.get(self, wrap_exception)
299 raise RetryError(self)
300 else:
--> 301 six.reraise(self.value[0], self.value[1], self.value[2])
302 else:
303 return self.value
File ~\miniconda3\lib\site-packages\six.py:719, in reraise(tp, value, tb)
717 if value.__traceback__ is not tb:
718 raise value.with_traceback(tb)
--> 719 raise value
720 finally:
721 value = None
File ~\miniconda3\lib\site-packages\retrying.py:251, in Retrying.call(self, fn, *args, **kwargs)
248 self._before_attempts(attempt_number)
250 try:
--> 251 attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
252 except:
253 tb = sys.exc_info()
File ~\miniconda3\lib\site-packages\dash\_jupyter.py:379, in JupyterDash.run_app.<locals>.wait_for_app()
377 if res != "Alive":
378 url = f"http://{host}:{port}"
--> 379 raise OSError(
380 f"Address '{url}' already in use.\n"
381 " Try passing a different port to run_server."
382 )
383 except requests.ConnectionError as err:
384 _get_error()
OSError: Address 'http://127.0.0.1:8050' already in use.
Try passing a different port to run_server.